// 接口是一系列抽象方法的声明，是一些方法特征的集合，这些方法都应该是抽象的，需要由具体的类去实现，然后第三方就可以通过这组抽象方法调用，让具体的类执行具体的方法。
// ts中接口用来定义对象的类型   是对对象的属性和方法的描述
// 使用接口定义对象的类型

// 关键字 变量名  ：数据类型
/* let objName: { name: string, age: number, sex?: string ,[propName:string]:any};
objName = {
    name: 'tom',
    age: 18,
    sex: 'nan',
}

let objName1: { name: string, age: number, sex?: string };
objName1 = {
    name: 'tom',
    age: 18,
    sex: 'nan',
} */
// 接口  
// readonly 只读属性 一旦赋值之后再也不能更改 改变会报错
// ? 可选属性
// 在接口当中规定的数据类型的属性必须按照规定的走，多了少了都不行
interface ObjGroup {
    readonly name: string,
    age: number,
    sex?: string,//可有可无
}
let objName: ObjGroup = {
    name: 'xiaoming',
    age: 18,
    sex: '男'

}
let objName1: ObjGroup = {
    name: 'xiaohong',
    age: 10
}
/* 
类型检查器会自动查看对象内部的属性是否与接口当中的描述是否一致，不一致就会报错。

*/

let objName3: { name: string, age: number, sex?: string, [propName: string]: any };
objName3 = {
    name: 'tom',
    age: 18,
    sex: 'nan',
}
objName3.zheshu = 'henshuai';
console.log(objName3);
// objName.name = 'chenglu';
export {
    objName,
    objName1

}
